﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using ASPPanificadora.controller;
using ASPPanificadora.classes;
using ASPPanificadora.Funcoes;

namespace ASPPanificadora.Telas
{
    public partial class ProdutoView : System.Web.UI.Page
    {
        ICategoriaProdutoController categoriaProdutoController;
        ITipoProdutoController tipoProdutoController;
        IProdutoController produtoController;
        Produto produto = new Produto();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["TipoUsuario"] == null || !ControleAcessoTela.ConfirmaAcessoTela("ProdutoView", Session["TipoUsuario"]))
                Response.Redirect("~/Default.aspx");

            ((SiteCadastro)Page.Master).btnSalvar.Click += new EventHandler(Salvar);
            ((SiteCadastro)Page.Master).btnPesquisa.Click += new EventHandler(Pesquisar);
            ((SiteCadastro)Page.Master).btnLimpar.Click += new EventHandler(LimparCampos);

            if (!IsPostBack)
            {
                categoriaProdutoController = new CategoriaProdutoController();
                IList<CategoriaProduto> categorias = categoriaProdutoController.RecuperarCategorias();
                categoriaProdutoController = null;
                tipoProdutoController = new TipoProdutoController();
                IList<TipoProduto> tipoProdutos = tipoProdutoController.Recuperar();
                tipoProdutoController = null;

                drdListaCategoriaProduto.Items.Add(new ListItem("Selecione", "0"));
                drdListaTipoProduto.Items.Add(new ListItem("Selecione", "0"));

                foreach (CategoriaProduto categoria in categorias)
                {
                    drdListaCategoriaProduto.Items.Add(new ListItem(categoria.NomeCategoriaProduto, categoria.Id.ToString()));
                }

                foreach (TipoProduto tipoproduto in tipoProdutos)
                {
                    drdListaTipoProduto.Items.Add(new ListItem(tipoproduto.NomeTipoProduto, tipoproduto.Id.ToString()));
                }
            }
        }

        protected void ExibeMensagem(string msg)
        {
            ((SiteCadastro)Page.Master).txtResultado.Text = msg;
        }

        protected void Salvar(object sender, EventArgs e)
        {
            string msg = "";
            try
            {
                produto = new Produto();
                produto.Id = Convert.ToInt32(txtCodigo.Text);
                produto.NomeProduto = txtNomeProduto.Text;
                produto.Descricao = txtDescricao.Text;
                produto.CodigoBarra = double.Parse(txtCodigoBarra.Text);
                produto.ValorUnitario = double.Parse(txtValorUnitario.Text);
                produto.IdTipoProduto = Int32.Parse(drdListaTipoProduto.SelectedValue);
                produto.IdCategoriaProduto = Int32.Parse(drdListaCategoriaProduto.SelectedValue);

                produtoController = new ProdutoController();
                msg = produtoController.Salvar(produto);
                txtCodigo.Text = produto.Id.ToString();
            }
            catch (Exception ex)
            {
                msg = "Erro: " + ex.Message.ToString();
            }
            finally
            {
                ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text = null;
                ExibeMensagem(msg);
            }
        }

        protected void LimparCampos(object sender, EventArgs e)
        {
            ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text = null;
            ((SiteCadastro)Page.Master).txtResultado.Text = null;
            txtCodigo.Text = "0";
            txtNomeProduto.Text = null;
            txtDescricao.Text = null;
            txtCodigoBarra.Text = null;
            txtValorUnitario.Text = null;
            drdListaCategoriaProduto.SelectedIndex = 0;
            drdListaTipoProduto.SelectedIndex = 0;
        }

        protected void Pesquisar(object sender, EventArgs e)
        {

            if (ValidaCamposPesquisa())
                LimparCampos(sender, e);
            else
            {
                try
                {
                    int id = Convert.ToInt32(((SiteCadastro)Page.Master).txtPesquisaCodigo.Text);
                    produto = new Produto();
                    produtoController = new ProdutoController();
                    produto = produtoController.PesquisarPorId(id);
                    if (produto == null)
                        LimparCampos(sender, e);
                    else
                    {
                        RedefinirCampos();
                    }
                }
                catch (Exception ex)
                {
                    LimparCampos(sender, e);
                    ExibeMensagem(ex.ToString());
                }
            }
        }

        private bool ValidaCamposPesquisa()
        {
            if (((SiteCadastro)Page.Master).txtPesquisaCodigo == null || ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text.Equals("") || ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text.Equals("0"))
                return true;
            else
                return false;
        }

        private void RedefinirCampos()
        {
            ((SiteCadastro)Page.Master).txtPesquisaCodigo.Text = null;
            ((SiteCadastro)Page.Master).txtResultado.Text = null;
            txtCodigo.Text = produto.Id.ToString();
            txtNomeProduto.Text = produto.NomeProduto;
            txtDescricao.Text = produto.Descricao;
            txtCodigoBarra.Text = produto.CodigoBarra.ToString();
            txtValorUnitario.Text = produto.ValorUnitario.ToString();
            drdListaCategoriaProduto.SelectedValue = produto.IdCategoriaProduto.ToString();
            drdListaTipoProduto.SelectedValue = produto.IdTipoProduto.ToString();
        }
    }
}